package leetcode.array.remove;


import java.util.Arrays;

/**
 * 80. 删除有序数组中的重复项 II
 *
 * 每个元素 最多出现两次
 *
 */
public class RemoveDuplicates2 {
    public static void main(String[] args) {
        RemoveDuplicates2 solution = new RemoveDuplicates2();

        int[] nums = {0, 0, 0, 0, 1, 1, 1, 1, 2, 3, 3};
        int len = solution.removeDuplicates(nums);
        System.out.println(len);
        System.out.println(Arrays.toString(nums));
    }


    /**
     *
     * @param nums 有序数组
     * @return 新数组的长度
     */
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        if (n <= 2) {
            return n;
        }
        // left 指向已确认数组的下一个位置
        // right 指针用于遍历
        int left = 2, right = 2;
        while (right < n) {
            // nums[left - 2] != nums[right] 表示如果新元素加入后不会和前两个元素构成3个相同的元素, 那么这时候就进行覆盖操作
            // nums[left-2]就是直接取新序列中倒数第二个元素, 如果该元素和新元素相同, 说明加入后会构成3个相同的元素, 显然是不符合题意的
            if (nums[left - 2] != nums[right]) {
                nums[left] = nums[right];
                left++;
            }
            right++;
        }
        return left;
    }
}
